const db = require("../db/index");

// 获取文章列表的处理函数
exports.getArticleList = (req, res) => {
  // 定义查询文章列表的 SQL 语句
  const sql = "SELECT * FROM article";
  // 执行 SQL 语句查询文章列表数据
  db.query(sql, (err, results) => {
    if (err) return res.cc(err); // 如果查询失败，返回错误信息
    res.send({
      // 如果查询成功，返回成功信息和文章列表数据
      status: 0,
      message: "获取文章列表成功！",
      data: results, // 文章列表数据
    });
  });
};

// 添加文章的处理函数
exports.addArticle = (req, res) => {
  //把Tags数组转成字符串
  req.body.tags = req.body.tags.join(",");
  console.log(req.body.tags);
  const insertData = req.body;
  const sql = "INSERT INTO article SET ?";
  db.query(sql, insertData, (err, results) => {
    if (err) return res.cc(err);
    if (results.affectedRows !== 1) return res.cc("添加文章失败，请稍后再试！");
    // 将发布文章的用户的博客文章数加1
    const updateSql =
      "UPDATE users SET blog_number = blog_number + 1 WHERE id =?";
    db.query(updateSql, [insertData.user_id], (err, results) => {
      if (err) return res.cc(err);
      if (results.affectedRows !== 1) return res.cc("更新用户信息失败");
      res.cc("添加文章成功！", 0);
    });
  });
};

// 编辑文章后提交处理函数
exports.editArticle = (req, res) => {
  const articleId = req.body.id;
  const title = req.body.title;
  const content = req.body.content;
  const tags = req.body.tags;
  const sql = "UPDATE article SET ? WHERE id = ?";
  db.query(sql, [{ title, content, tags }, articleId], (err, results) => {
    if (err) return res.cc(err);
    if (results.affectedRows !== 1) return res.cc("更新文章失败，请稍后再试！");
    res.cc("更新文章成功！", 0);
  });
};

// 点赞文章的处理函数
exports.likeArticle = (req, res) => {
  const articleId = req.body.articleId;
  const userId = req.body.userId;

  const checkSql = "SELECT like_users_id FROM article WHERE id = ?";
  db.query(checkSql, [articleId], (err, results) => {
    if (err) return res.cc(err);
    if (results.length === 0) return res.cc("文章不存在");

    const currentLikeUsers = results[0].like_users_id || "";
    let likeUsersIdArr = currentLikeUsers ? currentLikeUsers.split(",") : [];
    const isLiked = likeUsersIdArr.some((id) => id === userId);

    if (isLiked) return res.cc("您已点过赞");

    likeUsersIdArr.push(userId);
    const newLikeUsers = likeUsersIdArr.join(",");

    // 使用事务保证原子性
    db.beginTransaction((err) => {
      if (err) return res.cc(err);

      // 1. 更新 like_users_id
      const updateUsersSql =
        "UPDATE article SET like_users_id = ? WHERE id = ?";
      db.query(updateUsersSql, [newLikeUsers, articleId], (err, results) => {
        if (err) return db.rollback(() => res.cc(err));
        if (results.affectedRows !== 1)
          return db.rollback(() => res.cc("更新用户点赞记录失败"));

        // 2. 更新 like_count
        const updateCountSql =
          "UPDATE article SET like_count = like_count + 1 WHERE id = ?";
        db.query(updateCountSql, [articleId], (err, results) => {
          if (err) return db.rollback(() => res.cc(err));
          if (results.affectedRows !== 1)
            return db.rollback(() => res.cc("更新点赞数失败"));

          // 3. 事务提交成功后再查询最新数据
          db.commit((commitErr) => {
            if (commitErr) return db.rollback(() => res.cc(commitErr));

            // 提交成功后查询最新文章数据
            const selectSql = "SELECT * FROM article WHERE id = ?";
            db.query(selectSql, [articleId], (err, results) => {
              if (err) return res.cc(err);
              if (results.length === 0) return res.cc("文章不存在");

              res.send({
                status: 0,
                message: "点赞成功！",
                data: results[0], // 返回最新的文章数据（包含更新后的 like_count）
              });
            });
          });
        });
      });
    });
  });
};

//删除文章的处理函数
exports.deleteArticle = (req, res) => {
  console.log(req.body);
  const articleId = req.body.id; // 获取文章ID
  const userId = req.body.user_id;
  const sql = "DELETE FROM article WHERE id =?"; // 删除文章的SQL语句
  db.query(sql, [articleId], (err, results) => {
    if (err) return res.cc(err); // 如果查询失败，返回错误信息
    if (results.affectedRows !== 1) {
      console.log(results);
      return res.cc("删除文章失败，请稍后再试！");
    } // 如果删除的行数不为1，返回错误信息
    // 将发布文章的用户的博客文章数减1
    const updateSql =
      "UPDATE users SET blog_number = blog_number - 1 WHERE id =?";
    db.query(updateSql, [userId], (err, results) => {
      if (err) return res.cc(err);
      if (results.affectedRows !== 1) return res.cc("更新用户信息失败");
      res.cc("删除文章成功！", 0);
    });
  });
};

exports.getArticleDetail = (req, res) => {
  const articleId = req.params.id; // 获取文章ID
  const sql = "SELECT * FROM article WHERE id =?"; // 查询文章的SQL语句
  db.query(sql, [articleId], (err, results) => {
    if (err) return res.cc(err); // 如果查询失败，返回错误信息
    if (results.length === 0) return res.cc("文章不存在"); // 如果查询结果为空，返回错误信息
    res.send({
      // 如果查询成功，返回成功信息和文章数据
      status: 0,
      message: "获取文章详情成功！",
      data: results[0], // 文章数据
    });
  });
};
